import "reflect-metadata";
import {createConnection} from "typeorm";
import {User} from "./entity/User";
import {UserExtend} from "./entity/UserExtend";
import {Posts} from "./entity/Posts";
import {Tags} from "./entity/Tags";

createConnection().then(async connection => {
    // 创建tag1
    const tag1 = new Tags();
    tag1.name = 'mysql';

    // 创建tag2
    const tag2 = new Tags();
    tag2.name = 'node';

    // 帖子一
    const posts1 = new Posts();
    posts1.title = '文章一';
    posts1.content = '文章一内容';
    posts1.tags = [tag1, tag2];

    // 帖子二
    const posts2 = new Posts();
    posts2.title = '文章二';
    posts2.content = '文章二内容';
    posts2.tags = [tag1];

    // 创建一个用户
    const user = new User();
    user.username = '王五';
    user.password = '123456';
    user.posts = [posts1, posts2];


    const userRepository = connection.getRepository(User);
    const postsRepository = connection.getRepository(Posts);
    const tagRepository = connection.getRepository(Tags);
    await tagRepository.save(tag1);
    await tagRepository.save(tag2);

    await postsRepository.save(posts1);
    await postsRepository.save(posts2);
    await userRepository.save(user);
    console.log('添加数据成功');

    const result = await postsRepository.findOne({ where: { id: 1 }, relations: ['tags', 'user'] });
    console.log(result);
}).catch(error => console.log(error));


// createConnection().then(async connection => {
//     // 帖子一
//     const posts1 = new Posts();
//     posts1.title = '文章一';
//     posts1.content = '文章一内容';
//
//     // 帖子二
//     const posts2 = new Posts();
//     posts2.title = '文章二';
//     posts2.content = '文章二内容';
//
//     // 创建一个用户
//     const user = new User();
//     user.username = '王五';
//     user.password = '123456';
//     user.posts = [posts1, posts2];
//
//     const userRepository = connection.getRepository(User);
//     const postsRepository = connection.getRepository(Posts);
//     await postsRepository.save(posts1);
//     await postsRepository.save(posts2);
//     await userRepository.save(user);
//     console.log('添加数据成功');
//
//
//     // relations存放一个数组,可以存放多个关联关系的
//     // const result = await userRepository.find({ relations: ['posts'] });
//     // console.log(JSON.stringify(result));
//
//     const result = await postsRepository.find({ relations: ['user'] });
//     console.log(result);
// }).catch(error => console.log(error));

// createConnection().then(async connection => {
//     // 创建一个用户
//     const user = new User();
//     user.username = '王五';
//     user.password = '123456';
//
//     const userExtend = new UserExtend();
//     userExtend.mobile = '13412345678';
//     userExtend.address = '中国';
//     // 关联两个数据模型
//     userExtend.user = user;
//
//     // 必须先保存用户表,因为他要提供主键出来
//     const userRepository = connection.getRepository(User);
//     await userRepository.save(user);
//
//     const userExtendRepository = connection.getRepository(UserExtend);
//     await userExtendRepository.save(userExtend);
//     console.log('插入数据成功');
// }).catch(error => console.log(error));
//
// createConnection().then(async connection => {
//     // 使用relations关联查询数据(正向查找)
//     // const userRepository = connection.getRepository(User);
//     // // userDetail就是当前表中定义的字段
//     // const result = await userRepository.find({ relations: ['userDetail'] })
//     // console.log(result);
//     const userExtendRepository = connection.getRepository(UserExtend);
//     const result = await userExtendRepository.find({ relations: ['user'] });
//     console.log(result);
// }).catch(error => console.log(error));
//
// // async
// createConnection().then(async connection => {
//     // 2.使用async+await
//     const user = new User();
//     user.username = '李四';
//     user.password = '123456';
//     const result = await connection.manager.save(user);
//     console.log('插入结果', result);
// }).catch(error => console.log(error));
//
// //使用Repositories(使用句柄的方式)方式新增数据
// createConnection().then(async connection => {
//     // 3.使用Repositories方式新增数据
//     const user = new User();
//     user.username = '王五';
//     user.password = '123456';
//     const userRepository = connection.getRepository(User);
//     const result = await userRepository.save(user);
//     console.log(result);
// }).catch(error => console.log(error));

// // 删除
// createConnection().then(async connection => {
//     // 4.删除数据
//     // 4.1创建一个句柄
//     const userRepository = connection.getRepository(User);
//     // 4.2根据句柄去查询实体findOne传递数字会默认根据id查询
//     const user = await userRepository.findOne(1);
//     // 4.3删除数据
//     await userRepository.remove(user);
//
// }).catch(error => console.log(error));
//
// createConnection().then(async connection =>{
//     // 5.修改数据
//     const userRepository = connection.getRepository(User);
//     const user = await userRepository.findOne(2);
//     user.password = '23456';
//     await userRepository.save(user);
// })
